分类
联系方式
  1. 新浪微博
  2. E-mail

PunkOS 数据库应用

PunkOS 底层采用 RayDB 这个 NoSQL 数据库。PunkOS 数据库应用是一个上层应用,用来对 RayDB 数据进行管理。

数据库应用的功能,除了管理 PunkOS 内的数据外,同时也支持用户直接通过该应用,创建自定义数据。

因此 RayDB 数据库中的数据,主要可以分为两类:App 中定义的数据、用户直接在数据库应用中定义的数据。

UserStory

梳理几类使用场景。

时间序列存储

我对统计学非常感兴趣,首先想到的是存储时间序列。

我希望用户能够创建自己的时间序列。

时间序列按照频率,分为年度、半年度、季度、月度、日频率、小时频率、分钟频率。

在划分数据库表结构上,有两种考虑:

  1. 按指标来建表,每种指标一个表
  2. 按频率来建表,每种频率一个表

我考虑使用后者。因为对于时间序列而言,时间是一个客观物理实体。同一时间下的数据,处于同一个时空上下文,具备相关性。

数据库应用的表

数据库应用自身需要建几张表呢?

  1. 时间序列功能的指标表:记录包含那些指标
  2. 时间序列功能的指标字段表:记录每个指标都包含那些字段
  3. 时间序列功能的年度频率表
  4. 时间序列功能的半年度频率表
  5. 时间序列功能的季度频率表
  6. 时间序列功能的月度频率表
  7. 时间序列功能的日度频率表

时间序列功能:指标表

CollectionName:timeseries
字段 名称 类型 说明
id 主键 数值 指标的唯一标识,字段、数据表都以此为关联依据
name 指标名称 字符串 中文名称
description 指标说明 字符串 介绍
frequency 频率 字符串枚举 枚举定义:
  • year:年度表
  • halfyear:半年度表
  • quarter:季度表
  • month:月度表
  • day:日度表

注:时间序列功能的小时、分钟由于频率太高,暂时先不考虑,后续用到时,扩充成本也低,再扩充即可。

时间序列功能:指标表字段表

CollectionName:timeseries_fields
字段 名称 类型 说明
id 主键 数值 指标的唯一标识,字段、数据表都以此为关联依据
name 指标名称 字符串 中文名称
description 指标说明 字符串 介绍
ts_id 对应的时间序列指标 数值 不可为空

时间序列功能:年度频率表

CollectionName:timeseries_year
字段 名称 类型 说明
id 主键 数值 指标的唯一标识,字段、数据表都以此为关联依据
ts_id 对应的时间序列指标 数值 不可为空
f_id 对应的时间序列字段 数值 不可为空
year 年份 数值 不可为空
value 具体值 数值 不可为空

通用时间序列表

在不同频率的表内,包含有以下列:

  • 指标 indicator-id
  • 指标属性 key-id
  • 值 value

时间序列功能

时间序列作为一个专门的子功能。

时间序列需要有一个专门的表,容纳创建的时间序列指标。在界面体现上,有一个子列表展示所有的时间序列指标。